package com.sparkseries.dao;

import com.sparkseries.domain.SysUser;
import com.sparkseries.domain.SysUserAuthentication;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户管理
 */
@Mapper
public interface SysUserMapper {
    /**
     * 注册用户
     * @param user 用户类
     * @return Integer
     */
    Integer register(SysUser user);

    /**
     * 实名认证
     * @param authentication 实名信息类
     * @return Integer
     */
    Integer insertUserAuthentication(SysUserAuthentication authentication);

    /**
     * 注销用户
     * @param userId 用户ID
     * @return Integer
     */
    Integer deleteUser(@Param("userId") Long userId);

    /**
     * 删除实名认证
     * @param userId 用户ID
     * @return Integer
     */
    Integer deleteUserAuthentication(@Param("userId") Long userId);

    /**
     * 修改用户信息
     * @param user 用户类
     * @return Integer
     */
    Integer updateUserInfo(SysUser user);

    /**
     * 修改用户状态
     * @param userId 用户ID
     * @param status 是否启用（0-禁用，1-启用）
     * @return Integer
     */
    Integer updateUserStatus(@Param("userId") Long userId, @Param("status") Integer status);

    /**
     * 修改用户实名状态
     * @param userId 用户ID
     * @param status 是否实名（0-实名，1-未实名）
     * @return Integer
     */
    Integer updateUserAuthStatus(@Param("userId") Long userId, @Param("status") Integer status);

    /**
     * 通过用户ID修改用户密码
     * @param userId 用户ID
     * @param password 用户密码
     * @return Integer
     */
    Integer updatePasswordByUserId(@Param("userId") Long userId, @Param("password") String password);

    /**
     * 通过用户名修改用户密码
     * @param username 用户名
     * @param password 用户密码
     * @return Integer
     */
    Integer updatePasswordByUsername(@Param("username") String username, @Param("password") String password);

    /**
     * 获取用户列表
     * @param user 用户类
     * @return 用户类集合
     */
    List<SysUser> listUser(SysUser user);

    /**
     * 通过用户ID获取用户信息
     * @param userId 用户ID
     * @return 用户类
     */
    SysUser getUserById(@Param("userId") Long userId);

    /**
     * 通过用户名获取用户信息
     * @param username 用户名
     * @return 用户类
     */
    SysUser getUserByUsername(String username);

    /**
     * 通过用户ID获取其角色ID集合
     * @param userId 用户ID
     * @return 角色ID集合
     */
    List<Long> getRoleIdsByUserId(@Param("userId") Long userId);
}
